{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "E:\\Program Files (x86)\\Anaconda3\\lib\\site-packages\\ipykernel\\parentpoller.py:116: UserWarning: Parent poll failed.  If the frontend dies,\n",
      "                the kernel may be left running.  Please let us know\n",
      "                about your system (bitness, Python, etc.) at\n",
      "                ipython-dev@scipy.org\n",
      "  ipython-dev@scipy.org\"\"\")\n",
      "E:\\Program Files (x86)\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:3: DeprecationWarning: numpy.core.umath_tests is an internal NumPy module and should not be imported. It will be removed in a future NumPy release.\n",
      "  This is separate from the ipykernel package so we can avoid doing imports until\n"
     ]
    }
   ],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "import numpy.core.umath_tests\n",
    "import matplotlib as mpl\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline\n",
    "import seaborn as sns\n",
    "sns.set(style=\"whitegrid\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.model_selection import train_test_split\n",
    "from sklearn.model_selection import GridSearchCV\n",
    "from sklearn.model_selection import learning_curve\n",
    "from sklearn.preprocessing import LabelEncoder\n",
    "from sklearn.preprocessing import StandardScaler\n",
    "from sklearn.ensemble import RandomForestRegressor\n",
    "from sklearn.metrics import mean_squared_error"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "df = pd.read_csv('data/cleaned.csv')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "   User_ID  Product_ID  Gender  Occupation  Marital_Status  \\\n",
      "0        0         670       0          10               0   \n",
      "1        0        2374       0          10               0   \n",
      "2        0         850       0          10               0   \n",
      "3        0         826       0          10               0   \n",
      "4        1        2732       1          16               0   \n",
      "\n",
      "   Product_Category_1  Product_Category_2  Product_Category_3  Purchase  0-17  \\\n",
      "0                   3                 0.0                 0.0      8370     1   \n",
      "1                   1                 6.0                14.0     15200     1   \n",
      "2                  12                 0.0                 0.0      1422     1   \n",
      "3                  12                14.0                 0.0      1057     1   \n",
      "4                   8                 0.0                 0.0      7969     0   \n",
      "\n",
      "  ...  51-55  55+  A  B  C  0  1  2  3  4+  \n",
      "0 ...      0    0  1  0  0  0  0  1  0   0  \n",
      "1 ...      0    0  1  0  0  0  0  1  0   0  \n",
      "2 ...      0    0  1  0  0  0  0  1  0   0  \n",
      "3 ...      0    0  1  0  0  0  0  1  0   0  \n",
      "4 ...      0    1  0  0  1  0  0  0  0   1  \n",
      "\n",
      "[5 rows x 24 columns]\n"
     ]
    }
   ],
   "source": [
    "#特征工程 解决编码问题\n",
    "#User_ID和Product_ID使用序号，Gender和Marray使用二元类型，其他使用热编码\n",
    "le_U_ID = LabelEncoder()\n",
    "df['User_ID'] = le_U_ID.fit_transform(df['User_ID'])\n",
    "le_P_ID = LabelEncoder()\n",
    "df['Product_ID'] = le_P_ID.fit_transform(df['Product_ID'])\n",
    "df['Gender'] = np.where(df['Gender']=='M',1,0) # Female: 0, Male: 1\n",
    "df_Age = pd.get_dummies(df.Age)\n",
    "df_CC = pd.get_dummies(df.City_Category)\n",
    "df_SIC = pd.get_dummies(df.Stay_In_Current_City_Years)\n",
    "df_encoded = pd.concat([df,df_Age,df_CC,df_SIC],axis=1)\n",
    "df_encoded.drop(['Age','City_Category','Stay_In_Current_City_Years'],axis=1,inplace=True)\n",
    "print(df_encoded.head(5))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "#考虑所有因素的随机森林\n",
    "df_frac = df_encoded.sample(frac=0.02,random_state=100)\n",
    "X = df_frac.drop(['Purchase'], axis=1)\n",
    "y = df_frac['Purchase']\n",
    "X_train,X_test,y_train,y_test = train_test_split(X,y,random_state=100)\n",
    "\n",
    "scaler = StandardScaler().fit(X_train)\n",
    "X_train_scaled = scaler.transform(X_train)\n",
    "X_test_scaled = scaler.transform(X_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Best parameter: {'n_estimators': 300}\n",
      "Best score: 2952.88\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "#找最好的树数量\n",
    "param_grid = {'n_estimators':[1,3,10,30,100,150,300,500]}\n",
    "grid_rf = GridSearchCV(RandomForestRegressor(),param_grid,cv=10,scoring='neg_mean_squared_error').fit(X_train_scaled,y_train)\n",
    "plt.figure()\n",
    "plt.plot(list(param_grid.values())[0],(-1*grid_rf.cv_results_['mean_test_score'])**0.5)\n",
    "plt.xlabel('Number of trees')\n",
    "plt.ylabel('10-fold CV RMSE')\n",
    "print('Best parameter: {}'.format(grid_rf.best_params_))\n",
    "print('Best score: {:.2f}'.format((-1*grid_rf.best_score_)**0.5))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[1, 3, 10, 30, 100, 150, 300, 500]\n",
      "[4247.05341258 4247.15943922 4242.77394352 4242.3443541  4241.55523353\n",
      " 4241.96566505 4242.09576348 4241.71934083 3855.31146603 3722.05578694\n",
      " 3734.66784735 3691.72723827 3683.29923415 3680.5794297  3689.64911963\n",
      " 3693.44388342 3389.3974499  3219.04764719 3171.9365182  3182.22730843\n",
      " 3174.08999789 3172.3412981  3177.07998115 3174.10343071 3132.42601186\n",
      " 3024.86600664 2969.0861451  2954.44150995 2948.45280251 2946.2521399\n",
      " 2944.3972186  2945.06369423 3290.58422366 3050.6314955  2985.73445095\n",
      " 2961.92587993 2947.12595654 2942.12719317 2940.66358406 2939.51864026\n",
      " 3550.40413782 3176.86622171 3018.93712812 2970.92592281 2949.01301239\n",
      " 2945.0290755  2943.49453472 2943.85625944]\n",
      "Best parameter: {'max_depth': 9, 'n_estimators': 500}\n",
      "Best score: 2939.52\n"
     ]
    }
   ],
   "source": [
    "#调参\n",
    "param_grid = {'n_estimators':[1,3,10,30,100,150,300,500],'max_depth':[1,3,5,7,9,11]}\n",
    "grid_rf = GridSearchCV(RandomForestRegressor(),param_grid,cv=10,scoring='neg_mean_squared_error').fit(X_train_scaled,y_train)\n",
    "'''\n",
    "plt.figure()\n",
    "plt.plot(np.array(list(param_grid.values())[0]),np.array((-1*grid_rf.cv_results_['mean_test_score'])**0.5))\n",
    "plt.xlabel('Number of trees')\n",
    "plt.ylabel('10-fold CV RMSE')\n",
    "'''\n",
    "print(list(param_grid.values())[0])\n",
    "print((-1*grid_rf.cv_results_['mean_test_score'])**0.5)\n",
    "print('Best parameter: {}'.format(grid_rf.best_params_))\n",
    "print('Best score: {:.2f}'.format((-1*grid_rf.best_score_)**0.5))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "#最好参数：'max_depth': 9, 'n_estimators': 150\n",
    "train_sizes, train_scores, valid_scores = learning_curve(RandomForestRegressor(max_depth=9, n_estimators=500), X_train_scaled, y_train, cv=10, scoring='neg_mean_squared_error')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.legend.Legend at 0x22734bbdc50>"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZMAAAEPCAYAAACHuClZAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvIxREBQAAIABJREFUeJzs3Xl8nVd97/vPs+dR8+BBHmI7XhnsDDgDIc0EKbyYEppbkgM5hPYWaC9wTnhdQoHepMBp4PTctumFllBIgKRJwdDCodBMUAIhjEkUZ7DjLMejJA8arGHPwzPcP55nS1uybMmWtqRt/96vl1/WXs+z9/5JcfZX61nPWstwHAchhBBiLnyLXYAQQoj6J2EihBBiziRMhBBCzJmEiRBCiDmTMBFCCDFnEiZCCCHmTMJECCHEnEmYCCGEmDMJEyGEEHMmYSKEEGLOJEyEEELMWWCxC6iV7u7uMHApcBiwFrkcIYSoF35gOfDsli1birN90mkbJrhB8vRiFyGEEHXqKuCXsz35dA6TwwAbN24kFAotyBtu376dTZs2Lch7zTepfeHVa91Qv7XXa92wcLWXSiV27doF3mfobJ3OYWIBhEIhwuHwgr3pQr7XfJPaF1691g31W3u91g0LXvtJDQ/IALwQQog5kzARQggxZ6fzZS4hhJgV27bp6+sjm80udinHFQgE2Llz57y9XjAYpKOjg4aGhnl5PQkTIcQZb2hoCMMwUErh8y3NCzbZbJZ4PD4vr+U4Dvl8noMHDwLMS6AszZ+aEEIsoNHRUTo7O5dskMw3wzCIxWKsXLmSgYGBeXnNM+MnJ4QQJ2BZFsFgcLHLWHDRaJRyuTwvryVhchyWZZMvmotdhhBigRiGsdglLLj5/J4lTI5jcDTPT5/t4cnnetm+Z4gjR7PkCmUcx1ns0oQQYtynPvUpvv/979Pf388HP/jBac9RStW8DhmAPw7HAb/PIBz0c+Rolp7+NAYQCvppb47S0RwjGQsRiwTOyN9ohBBLS2dnJ/fdd9+ivb+EyQyCAR/BwMSsU9O0GRjO09efAQNCAR8dzTHam2PkSzaO40i4CCHm5KMf/SjvfOc7ectb3gLATTfdxMc+9jG+8pWvUCgUSKVSfPrTn+b6668ff05fXx+33XYbTz75JH19fXziE58gl8tx4YUXLkjNNQ0TpdT/AP4QcICva63vUUp9CPjvXttzwJ9qrUtKqYuA+4EG4BfAn2mtTaXUauBhoAPQwK1a60wt6z6RQMBHQ2BirS/TshkczXNwMMOBnhx5fw/tTTHamyM0xsPEIkF8PgkXIerJk8/18JNnemry2r9/2WreeMnqE55z44038qMf/Yi3vOUt7N+/n2KxyNatW7n77rtZv349v/nNb/jCF74wKUyq/dVf/RU33XQT7373u/nBD37Ad77znVp8K5PUbMxEKXUN8EbgAuAS4L8p98LdJ4A3eO0+4CPeUx4GPqq13ggYQOXi373AvVrrc3DD565a1XwqAn4fyViI1sYoDVE/iUiQo2N5XnxtiKdfOMh/PtvDtl0DHBxIk86VsG0ZcxFCnNg111zDtm3byGQy/Md//Ac33HADd999N6+99hpf/vKX+eY3v3nCCZbPPPMMb33rWwG44YYbFuROtZr1TLTWTymlrvN6Fyu99yoAH9ZapwCUUi8Dq5VSa4Co1vq33tMfAD6nlLofuBp4V1X7U8Ana1X3XPm9cEl6jy3LZmSswOEh9z98wG/Q1hiloyVGQzxMIio9FyGWmjdeMnPvoZZCoRDXXXcdTz75JI8//jhf/epX+ZM/+ROuuOIKLr/8cq644gruuOOOE75G5WYhwzAWZP5MTS9zaa3LSqnPAXcA/wr0aK0PACil2oGPAn8ErGDycseHgS6gDUhprc0p7XXD7/eRiIVIeI8t22Y0U6J/OIeDO8jf1hSlvSlGYyJEIhbCL+EixBnvxhtv5O6776apqYl4PE5PTw9bt24lFArxt3/7t1jW8Rf1fcMb3sAPf/hDbr31Vn784x9TLM56j6tTVvMBeK31Z5RS/wv4Ee6lq695PZXHcMdRfq6UuhJ3DKXCAGzcy2BTrwvZJ/P+27dvP6W6h9MmBw7nGYmd3I9o9+7dJ3W+7Tgc7HUomTZgYBjQEPPTlPATD/uJhnwL1nPp7u5ekPephXqtvV7rhvqtfbq6A4HAkluX65xzziGVSnHTTTcRDAa58cYbedvb3kYgEODSSy8ln88zNDSEaZoUi0Xy+Ty2bZPNZrnjjju48847+fa3v815551HPB4/7vdXKpXm5b+lUat5E0qpc4CI1voF7/FHgHOBfwSeAL6ktf4779ga4Kda6w3e46uAzwFvAY4CzVprSym1CnhKa71upvfv7u5eC+zbtGnTKe0BcHgoywu7BmhtjM76Obt372bDhg0n/V7VbNshXzQplNzOmGFAS4N7WawpESYZC+L3z3+Xtbu7my1btsz76y6Eeq29XuuG+q39eHXv3LmTc889dxEqmr35XJur2tTvvVgsVn4JP2vLli37Z/s6tbyQtg64TykVVkqFgBuB3wE/Bu6sBAmAd+mr4PVQAN4HPKa1LuNuvXuL134bbo/mtOXzGcSjQVobo7Q2RmlKRMgVyuzcd5Rfv3yIH//uAL/bcZj9h1OMpAuY1kl11IQQoiZqOQD/qFLqMmAb7o5d38MdA+kEPq6U+rh36g+11n8J3IobPg3A88CXvOMfBh5USt0J9ADvqVXNS5HPZxCLBIlF3LsxHMchXzDZuf8ojgM+w6ApEaazJUZTMkwyHiJQg56LEEKcSK0H4D8LfHZK898f59wXgcumaT8AXDvPpdUtwzg2XAoli1d7Rtxp+0BTMkxHS4zmZIRkLEQwIOEihKgtmQFf5wzDIBoOEA27/ykr4fJa7yi27WAY0Bif6Lk0xEMEA/5FrloIcbqRMJlGoWjyD999AdOy2NDVzKrOBC0NkbpYJmW6cCmWvXBxHAygIR6ioyVOS0OYZCxEKCjhIoSYGwmT4wiH/OzaPcLO/SMAxCIBujqSrOpIsKozyfLWOIE6uHxkGAaRUIBIaCJcSmWLvX2j7PYuiyViQUaGSqwZzZOMhwhLuAghTpKEyTQi4QAfetdmtul+HAd6BzL0DaTp7c+wq8cNF7/PYHlbnFWdSbo6EqzqSM7wqkuDYRiEQwHC1eFi2hwZLfHMjiNgQDIapKMlRktDlGQ8OB5EQghxPPIpcQKG4c1Ob47xOtUBQDZfpncgTV9/ht6BNM/sOMJvXnZ/w09Gfaw7vGe8B9PWFF3yl8YMw11mPxHx09bkzqkplS0OHEmz9+AYALGIGy6tjREaYiEiYflnI0QtpdNpPvWpT/HlL395Vue//PLLbN26lc9//vM1ruz45FPhJMWjQc5Z08I5a1oAd0n6w0ez9PaneXXfEV7rHeXF14YAiIT8k3ouK9rjdTH4HQr6J42jlMoWff1p9h0cBSAWCdHREqWtMUoyHhofnxFCzI+xsTF27tw56/M3b97M5s2ba1jRzORTYI4CAR+rOpOs6kzSEcuxfv16hlMFer2eS29/mtd63Q9hn2GwrDU2fn5XR4JkLDTDOyy+qeFSNi0ODmTYfygFBkRCATqbozQ3RPD7fQT8Bn6f93fVY1nQUtSL9Es/J/3ikzV57eSFbyR5wbUnPOfuu+9mYGCAj3zkI+zZs4fm5maCwSD33nsvf/EXf0F/fz8DAwNcccUVfP7zn+eZZ57hH//xH3nooYd43/vex+bNm+nu7mZ4eJg777yTa665pibfSzUJk3lmGMb47PWLNrYDkCuU6RvIjF8e6361n9/tOAJAUyLMqs6EFy5J2puiS/5DNxjw05ioDhe3d3agPw24S8Dg4K6w5kwsrub3GQQDfkIBH6Ggn2DAIBQMEAr6CAX8BIM+Aj4ffr9BwO/D75MwEmemO++8k9tuu41Pf/rTvOlNb+L++++nubmZn/3sZ5x77rl86UtfolQq8fa3v50dO3Yc8/xyucx3vvMdnnzySb74xS9KmJwuYpEgG1c3s3F1M+AuS3/kaG6857L3UIqX9xwFIBz009WRoKvTHXdZ2Z5Y8rfuTt2N8nhs23H/OO76Y9m8g2UXsW0Hy3ZwqCyZzTHLezoO+P2GGzpeGIWCbjAdOlqi/UiKQGBKGPl9BLxA8vsMCSMxa8kLrp2x97BQWltb6erqIpvN8o53vIOXXnqJBx54gL179zI6OkoulzvmOVdddRUAZ599NqOjowtSp4TJIvD7fazsSLCyI8HrNy3HcRxG00UvXNwezFPP9wHuB2tni3dprCPJqs4EDfGTX7hyKfDN8QO9EkbWeBiVsWyHwyMlAnuHmZRAUwLJcdyNzIJB33gIVfeSwiEfAb//2F6RhJFYZJFIZPzrhx56iCeeeIKbb76ZN7zhDezatYvpFuutLG67kDcASZgsAYZh0NwQobkhwgUb3EtjhaJJ32CG3v40fQMZXtg1yLOv9APupMNKsHR1Julsjp0RH3SVMJr6jzYR8dPaGJn2OdXGw8h2yBVMLLuMbdtYtoNtwzHdoapAchx3fGy8VzTeO5p4PDWM3N7RxOOlfmefWDoCgQCmaR7T/qtf/YpbbrmFd77znbz88su8+uqr2La9IJtfzUTCZImKhANs6GpiQ1cT4G6qNTCcp7c/Te9Amp7+FDv2uZfGQgEfK9u9S2OdCbraE+PzSMSE44XRbFWCyLZscqZNOlcdRs74MNG4Kb2jQMBH0O8nHPQRCPjYf6RAdO/R8bGiYNCH31fpFbm1VsaK/FV/fBJMp73W1lZWrFjBpz/96Unt73//+/nsZz/L1772NRKJBBdffDF9fX2sXr14u0JWyCdOnfD7fCxvi7O8Lc5l5y/DcRzGsiX6+tP0Drg9mF++eLCy1iMdzbHxgf1VHUkaEyH5AJqjict0J/9boOM4OA5YtoNp2RTLFqmcxaGhLLYzMZYEUwIJAwznmE6T3+fzekpuzyfojSUF/D6CfrcHVR1Ovqogqly2q26XfxtLSzAYZOvWrce0X3HFFTzxxBPTPufyyy8H3EthFV1dXTz5ZG3uSptKwqROGd7S802JMJvWtwFQLJkcHMx6d42leXnPEN2vDgCQjAXdyZSd7pyXztYY/iXQNT5TGIa7i2Z1GEVDPhriJ39reCWYKgFUNm2KJQu7qs2pCqfJPSa3DmfKsUnhNP61G1BB/8QxN4h8jOVMRlKF44aUhNOZR8LkNBIOBVi3spF1KxsB94NlYCTn3pbsXR7buX8YcAejV7bHvYBJUi7LJlv1YnIwzY9KCNm2Q9nrOTlOeaLXNCWceg4WKPoPT1McODbjY0XVYRSotAW9O/IC7h13PsO9nOf3T76UN3Hs5G9+qATu+GO3cbxn6D0cP+p43+eMr3vMLuKTDp5M86xOrn5o2Q5l8/j7vo8/x3uSzzAWdP1ACZPTmM9nsKw1zrLWOJec2wlAKlsaH9TvHUjz65cP4bzknv/UzpfGF7Jc1ZmkORmW3zDPED6fgQ8DZnkX+mjUf8ItravDybRsSqY9qc392v1wPmacCY65E68yjlRpduyqD3bvKmAlMJzq50/559tzIMtQ+cDUZjpjFqlscUn/ey+WHRzj2EH56Ti4YdIQOHHPdz63ba9pmCil/gfwh7jf29e11vcopa4H7gGiwHe01nd6514E3A80AL8A/kxrbSqlVgMPAx2ABm7VWmdqWTe4t+Rats3QWJ5QwE8k5F/y8z1moyEe4vx1rZy/rhVwl0o5NJThxZ0HyJkhXtk/zLZdgwDEKyslewP7y1rjsoujmJWTDaeZOE71mFLVRbspn/0zhcFozE/bNCHos/Lg2AQCwbkXWyOmj1n//+f+vGY+L5/PEwzOz/dcszBRSl0DvBG4AAgCryilfgp8A7gG6AUeUUq9VWv9GG5gfEBr/Vul1NeBDwJfAe4F7tVab1VK3QXcBXyyVnVXdDTHuPriVaRzRYbHChwdK5LK5QH3H3AkGCAS8uOv8w/XUNDP2uWNmNkYGzZswHEcBkfzE72X/jS6slKy32BFa9y7a8ydVFnZ8VGIWjIMA38New0mIYYGB+hctnxJ3GZba47jkM/nOXjwIJ2dnfPymrXcA/4ppdR1Xu9ipfdeTcBrWut9AEqph4F3K6VeAaJa6996T38A+JxS6n7gauBdVe1PsQBh4vMZNMRDNMRDrGx3l5cvlS2y+TJj2RJHx/IMpwqYpg2Oe36pbOM4zpLuKs/EMAw6mmN0NMfYco77jyyTK7nL8Ht3jv1uxxF+87J7vby1MTK+SnIiFiQUcHtwQW+JlMpSKWfCPBhRv2xfnFQ2RWbPa4tdynGZ5TKB2fYiHDcwTrTCdzAYpLOzk4aGhnmpr9Z7wJeVUp8D7gD+FVgBVI/aHQa6TtDeBqS01uaU9lnbvn37qRU/C80+h5LPoVCyyWRtAgGDF7bv8rrjBgEfhII+Ar6FnYl6qnbv3n3cY0HgrFY4qzWMaYUYzpgMjZkMpsrs3DfEi68NnvC1/T68AVj3T9BvEPBVP558fNJ5k76eOM9X9TM9Ue1LWb3WDfVbe73WfTIs26FsOVx4VvyE542Njc3be9Z8AF5r/Rml1P8CfgRsZPINCgZg494rOZt2vPZZ27Rp0/jSArXW3d3NRRe/jlyhTDZf5uhYgeGxPJl8efyccNBPJBxYcmMPu3fvZsOGDaf0XMdxGEkXyRdNSmWLkmlTKluUyzYl05rU5v6ptNsUTYtM0X1cLFtY1uwHBCtrdfmwicXCk3pCEzPTJ39dvZzK5Jns7nkLebv0XH7mi61ea6/XuuHkajctm0LJYsuWVSf9PsVi8ZR+Ca/lmMk5QERr/YLWOqeU+j7uYHz1vW3LgENAH7B8mvYBoFEp5ddaW945h2pV83zw+wySsRDJWIhlre5vBWXTIpMvk86WOZrKMzxWoFiywHDvuIiE/ERCgbq9FGQYBi0NMy9nMhuWbVeFUNXf5SmhNB5YFkPDY4SjEcpeezZfnvTcyq2gs+H3GRNrdwXd2epuCE0JqoD/mOVUpguscLD+x9WEmI1a9kzW4Y57/B5u7+JG4KvA3yilNgD7gPcC39BaH1BKFZRSV2qtfwW8D3jMu0z2NHAL8C3gNuCxGtZcE8GAn+akn+ZkhNXL3PGXQtEkWygzmilydLTASLowviRH0O8bv3usHi6PzSe/z4c/7Dup3Rxn+o3Ntp1J4VSuhNOkwKoKLXPieLnszrnIFkzKVb2ssjn7gPL5jMlreXlBVCrm2dazi4B/YuZ69XpelRntlX1hKscD3qz3yX8Mby6HrAMmFkctB+AfVUpdBmzD7Y18z7sjaxD4HhABHgX+zXvKrcB9SqkG4HngS177h4EHlVJ3Aj3Ae2pV80KKhANEwgFaG6OsX+l+4OW8lXCHUwWOjroD/JUZyqGg23sJLuAkpNOFz2cQCQWIzOM+ZJXJfdNduiuVLS94Ji7flafpZRVKNqXRApbl9p5My53NfjI9qeOpTBAMnCiAprQFq4JsIswqe8pUJh+6x4czJkOjeQkyMa7WA/CfBT47pe2nwIXTnPsicNk07QeAa2tS4BLi8xkkokES0SCdLTHAve6ZzZfJ5EocHSswNFZgLFt077I3DCJBP5GwX5ZFWQQ+n0HY5yc8h7lHx+tROVWT/cqW4wWNjWlOhM7ktqrH0x6vavMeF0vWtM85mR4Xz780bXOtgmxi8cvJC2BWL4Q59Xi9XjquRzIDfgkL+H00JsI0JsKs7HAvjxXLFplciXS2xOBogeFUHsudSkzA7yMSdj/g5LfD+mUY7mxvv9/HQu9cUx1kpuX2viohZFU97us7RFtHZ1VYzSLIvLZ5CbKT4Pe7c1T8fh+ObRHq3jYePJOD6NgFMCsrN08s8eK+1vhyL9MG2fQrPk/3Wj5fpbbp37+e/j+WMKkz4aCfsLct8NoVje7ko6JJJldmNF0cn/8C7kDV6TR7X9TerIOsMMQGbxWF+TI1yNye2UQoVZb6typbAVS+tuzxZVosq3LcPuZc23YYHhklkWwY3zqg+nVs77VKZXe2feW17OO8njWbKeZzZBiM97Qcxyb07PNTgvDYoPP73RC6YENbzeurJmFS5wzDIBYJEosE6WiJAc1Ylk22YJLJlxgeKzA0WiCdy4+Pv7jjB3KXkVhaFqJH5l5aXDcvr1W9rcC0YVMJQC+YJh+3jwk6y54mCK2J9cyGh0fcIHSqQ7PyfNubW2JTLLvt+dLMi0LOJwmT05Df7xufvb+iLQFMzN5P50oMjp6es/eFWEjVqzcHT2GPm5O1e3d51kFYmWeykCRMzhCViXnNDRFWL2vAcRwKJYtMrsxYpsjgQK97e7Lj9l4Cfh/RsHv3mASMEGImEiZnKMMwiIYDRMMB2pujjA3EuOjiteOz993FLSffnrxUZ+8LIRafhIkYN/3sfff25FS25M5/GcufVrP3hRDzQ8JEnFAw4KMpGaYpGZ5x9j4G4xsVVfMZ7g4Uhs/72zDwGRPXnCc/9q5DVx0TQix9EibipB1v9n6xZGLbExsZTXe7pmnZ2La7Bpfl3QJauZvFtG1M07ubxXGwLQdrfEOkKap25EvnLY6O5Y+p0708d2w4Tfd4PNAwMHwTz5MwE2J2JEzEnFXP3p9vlR3jnEnbvbq3ZFbCKmYPsnnT8knbwk4crwTUxJwEy7axbMZv3XSDbWJ/8MptlpW10iqO2V7W8bpi1fVOOWXa3pfXXizb5Ivu7gqGwfjKBpX3cXOscr77gpWjlYyTsBNLhYSJWNLcHfaAE2wBm4j6523V4qkmwssNG6c62By84KqEGOPnTp03YJkOlmNP6qWFQz5ikcD4e+C4+ys4lVC0wMEef8/qYMULy6mXFKu3UD9uzBhVJzjTHZhe9VNSeZOhqt6gF3FVoegFn8Gx4Xic4KwE48Tzp55j4PNVepUSokuNhIkQJzC+lznuBmHzycn0seW8ZXN7Da+X5rgPcNy/3HYmgmf862OOH6+9ug0cJgIMIFga4PyN7eOvbdvu5UsHLwxxcMbDFWzHxrEnznXADUbb9gKy6ntxqnqftoODNznQqro06jjT9BSn/GxwA60SQD6fQaHk9gYrvUSfzxg/JuZGwkSIOla5jOY9WrD3PZgMjE+IXQzTLXNSPWu80l5ZkqVs2u7eN/1+YpEApum2F4vuOmGW5UzqRbkmEqo6p3zVIeRNWqxuM87Q3pOEiRCi7lQWRDzZmeelsZ5pe4OVy5iTLk9a9vglyOrLk+WyPb5VwHhQme4uoUXTGl9bzJnae5r6nkxcHqzuPU38TV31nCRMhBBnPMMwCPiPPy53KsbX4PIuy1X3mqrX5Cp7m62VLWt8Ucuy6VQtcukGVCo3/V2LFdXjZA7uGnwLqabvppT6DHCz9/ARrfWfK6XeDPwN7n+254EPaK1LSqnVwMNAB6CBW7XWGaVUE/AvuDs3DgI3a62P1LJuIYSYK7f35Cc4T5+yzwaGuPjiNZN6Tcf0przwMk2bYHBhV6qo2bsppa4H3gxcDFwEbFFK/QHwdeC/aK03ATHcrXgB7gXu1VqfAzwH3OW13w08rbU+F7gP+GKtahZCiKXKZ7ibh4WDfmKRIIlYiMZEmOaGCG1NUTpbYqxoS7CqM8lZKxvp8vZAWrD6avjah4GPa61LWusysBNYjdsjaVBK+XG37s0rpYLA1Uxs4fsA8G7v67fj9kwAvg281TtfCCHEElHLPeB3VL5WSp2Ne7nrSuAA8HMgBezDDZA2IKW1Nr2nHAa6vK9XeI/RWptKqRTQDhyqVe1CCCFOTs1HaJRS5wOPAJ8A0sBfA5twg+Qe788XOHa2VGUPz6m3MRhVx2a0ffv2ky96Drq7uxf0/eaT1L7w6rVuqN/a67VuWNq113oA/krge8DHtNZblVLvBrZrrfd4x+8Dvgt8DGhUSvm11hawnImex0FgGdCnlAoASeDobGvYtGkT4fDC7KTd3d3Nli1bFuS95pvUvvDqtW6o39rrtW5YuNqLxeIp/RJeywH4VcAPgPdqrbd6zduBy5RSnd7jG4FnvTGVp4FbvPbbgMe8rx9lYpD+FtzB+HKt6hZCCHHyatkzuQN3gP0epVSl7Z9w79L6mVLKBHYDH/KOfRh4UCl1J9ADvMdrvwt4QCm1AxgFbq1hzUIIIU5BLQfgbwduP87hB6c5/wBw7TTtw8AN81qcEEKIeSX7rwohhJgzCRMhhBBzJmEihBBiziRMhBBCzJmEiRBCiDmTMBFCCDFnEiZCCCHmTMJECCHEnEmYCCGEmDMJEyGEEHMmYSKEEGLOJEyEEELMmYSJEEKIOZMwEUIIMWcSJkIIIeZMwkQIIcSc1XoP+M8AN3sPH9Fa/7lS6grg73H3cn8JeL/WuqSUugi4H2gAfgH8mdbaVEqtBh4GOgAN3Kq1ztSybiGEECenlnvAXw+8GbgYuAjYopR6P/B94ENa6/O9U//E+/th4KNa642AAXzQa78XuFdrfQ7wHO42vkIIIZaQWl7mOgx8XGtd0lqXgZ3AWuA3WuuXvHP+G/C/lVJrgKjW+rde+wPAu5VSQeBq4N+q22tYsxBCiFNQyz3gd1S+VkqdjXu56++AjFJqK3AO8Cvg47i9l8NVTz8MdAFtQEprbU5pF0IIsYTUdMwEQCl1PvAI8AncIHgL8HqgB/g68CngJ4BT9TQDsHF7TtXteO2ztn379lOq+1R1d3cv6PvNJ6l94dVr3VC/tddr3bC0a6/1APyVwPeAj2mttyql/gT4rdZ6n3f8u8BHgW8Cy6ueugw4BAwAjUopv9ba8s45dDI1bNq0iXA4PPdvZha6u7vZsmXLgrzXfJPaF1691g31W3u91g0LV3uxWDylX8JPecxEKdU2w/FVwA+A92qtt3rNP8YdiF/lPX4H0K21PgAUvPABeB/wmDfW8jRwi9d+G/DYqdYshBCiNk4YJkqpH1d9/ekph3/Mid0BRIB7lFIvKKVeAN4O/CnwI6XUq0AL8D+9828F/t5rTwBf8to/DHxIKfUKcBVw54zflRBCiAU102Wu9qqv383EBz+44xrHpbW+Hbj9OIcfmeb8F4HLpmk/AFw7Q51CCCEW0UyXuaYOih/vmBBCiDNiDSCdAAAgAElEQVTYTGFSHSASHkIIIaZ1Mj0TIYQQYlozjZmco5SqzFbfUPW1AayrXVlCCCHqyUxh8tYFqUIIIURdO2GYaK2fmtqmlGoBRrTWcglMCCEEMPM8kwal1MNKqWu8x98GBoHdSqkNC1GgEEKIpW+mAfi/BdLADqXU24A34a78+1HvmBBCCDFjmFwBfFhrPYQ7fvJ9rXWv1voxYGPNqxNCCFEXZgoTs2ps5A1A9RjKCWfACyGEOHPMdDeXpZRqxF0r6wLgZwBKqZVAqca1CSGEqBMzhck/As/j9kK+o7U+opR6J/DXwD/UujghhBD1YaZbgx9QSu3A3V+ksvR7G/D/aq0frHVxQgghZsd2bEpW2f1jlvAZPlpiTQv2/jNujqW1fnbK42/WrhwhhBDTsRybXDk/HhiFcoFsKUeulKOQGsIaGySYHSOYGcOfTVFafwGXv/7mBavvhGFStXzKtLTWF8xvOUIIcWYqW2WKVmk8LPLlAtlSlmwpTyGX4tChlylnthPMjhHIpNzgyKZoyqYwLHP8dRzAjiUZXbGwK17N1DNJAFHgIeBxwKp5RUIIcZqxHZuyZVKyShStEkWzRK5cIFfKkS3nyRez+LJjBLIpgpkxAtkxQtk0wWyKlswo/mKeVdWvFwxjJ5uxmzsprFLu14lmrGQzpViCgmPhW+D7bWcaM1mnlLoKeD9wL/BD4AGt9SuzeXGl1GeASj/rEa31n1cd+yjwh1rra73Hq4GHgQ5AA7dqrTNKqSbgX3AXlhwEbtZaH5n9tyiEELVl27bXq3B7FgWzSNYLilwpT6Gcx1cqeEHh9SoyaULZMdqyKfzZMQxnYoUqx/BhJxqxk82UW1dQTDZxKFukfcO5blsgQNm2KFtlTMcEx/AmaziEHItkKE5bvGVBfwazGTN5GnhaKRUF/gB3a90G4J+11l853vOUUtcDbwYuxu15Pa6U+gOt9f9WSp0HfArYXfWUe4F7tdZblVJ3AXcBnwTuBp7WWr9dKfU+4ItM7AkvhBA1Z1pm1SWoEvlykUwpS66cd8cxzBKGbRL0ehOBzBjhbJpILk0iM4o/M4qvPHk2hR2JYyebsdq7KK/bjJVsxk40ub2MWAMmbm+mEhg9B3ogHgO7QMQOEw/GaUi0EQ/FiQTDRPxhQoEQAZ9/UX5GM4ZJhdY6r5T6LpABPg58AThumACHgY9rrUsASqmdwGqlVBj4KvCXwG3esSBwNfAu77kP4E6Q/CTuvvFXe+3fBr6slApqrcuzrV0IIY7HcRzK3jhFJTAql5+y5Ry5cgHLsgCHQCFLIDNGMJMinM8Qy6ZoyIwRyIziy6Unv64/4AVEM6Vla7ESzW5QJJuwEs0QDGHa5qTAMDDcTaSKKSKBEPFQnIaQGxihowaXrb50UQPjRAzHmXnxX6XU63E/+G8CunHHUH6gtS7M5k2UUmcDvwKuBP4v4GVgH/BZrfW1SqnlwLNa6y7v/ACQ01qHlFJFIK61Nr1jfcBlWutDJ3rP7u7utd57CCHOYLZjYzoWpmNi2hYlu0zRLlG0SxSsIiXHxPH2AfSbZSKFLPFSnlgxR7SYI1LIESlkCBcy+Bx7/HUdoBSOUQwnKEYTFCMJShH370IkgRmMgGFgORamY2E5FpbtPd8wAIegESTiDxP1hYn4woT8QUJGkKAvgM+YaYGSmjtry5Yt+2d78kx3c30G+K+4vZF/Bi7UWvefTDVKqfOBR4BP4C4SuVpr/X8rpa6tOs3Hsbs6Vv6rTR1GMqqOzWjTpk2Ew+GTKfmUdXd3s2XLlgV5r/kmtS+8eq0bllbtpm25YxVmaeIuqLI3sF3OUzCLuB8bBj0H9rO+tZVkLk2okCacTRPIjLmXodIj+Iq5Sa89PtDdsZJi5RJUstntZSQawR/AcRwcx8KwTHxWmaBjEqr0MKCqhxEnEU4QDoSI+MOEAyH8J9HDWKifebFYZPv27Sf9vJkuc30G6AH6gOuA65RS4we11jec6MlKqSuB7wEf88ZCvgGcr5R6AfdOsWVKqe/gBlajUsqvtbaA5UCl53EQd9Jkn9djSQJHT+7bFELUs5JZIlPOUfLugnIHt3PkynlMu+omU8fBXyoSyWUI5zI0ebfR+jMj+NIjrM+MVX3MVwa6m7CTTZTWuIPbVrIJ27sk5YSj3ss6WI5VdUnKglJm/HWqL0nNJTDq2Uxh8sen+sJKqVXAD4BbtNZPAmit/8+q49fiXua6xXv8NO7A+rdwL6lVZtw/6j3+gnf8aRkvEeL0ZtkW6VKWkfwY/ZlBUsU0YIADfscmnMsSyaVpzaYJZEfxp92ehT8zgnGcgW6zvYujzStpWL1+0kA3PvdyUiUwSlYZ0zIxrSLki+41E0MCYyYz3Rp83CVTlFK/P8Nr3wFEgHuqejP/pLX+p+Oc/2HgQaXUnbi9ofd47XcBlWVdRoFbZ3hfIUSdcRyHXDnPWCHNQGaIofwwtuMQzGdpHDpC1+BB/GNH3R7GCQa6zWVrqga6m7ESTRAMjZ/bt/s11px1FmW7TNkysQop9wrYeGCEiYdiNIQTJEJxNzACYcJ+CYyZzDRm8jrcBR2HgT/WWg9580H+P9z9TaLHe67W+nbg9hMc/zlwbdXjA9WPq9qHgRNeThNC1J+SWSJVzDCYG6Y/M0jJLOPPp2kY6mfF0CGCRw7gTw8DYIciWM2dlFesn3QZyko040Tj3oC2y3EcTNvyAqOIVc5hGOA4kLFymLZJIhQjGU6SCMXcsAiEJDDmaKbLXF8BvgusBu5USv0MeBD4HXBhjWsTQpxGqi9dHUkPkCpmCBSyJAYP0z50iFB/D/7URHiYnWsonHMp5rK1WM0d45ejYEpgFDNYtjWeJw4QDURIegPeyVCMsBcYO8aiXLr20kX47k9/M4VJo9b675RSfmAX7mz2P9Nab619aUKIeuY4DtlybvzS1dH8CEYuRWzwMInBw7QNVIVHMIy5bA0FdYkXHp3j4VG2TArlPGWrXBUYDtFAdNrAiPjD+HzT31a7BG63PW3NFCY5AK21pZSKAG/XWm+rfVlCiHpUNEukixkGckcZSA9hZUaJDvWRGDzM6oFeAlPCo6guoVwVHo7juDPMSxkcx8YBwv4QHfFWWmJN45ekThQYYnHMFCbVczyGJEiEENUs2yJdzDBcGONIepD86ACRwT4SQ4dZMdBHIOXexW8Hw5ida8ht3OKGR8sy8PmwbMtd+LCYGr9htyGcYG1TF03RBhKhOJHAwswTE3MzU5j4lFLNeKFS/TWMD44LIc4QlUtXR4ujPH/oZcZGDhLu7yU6eIi2gYPj4eEEQ5Q715Db+LpJ4VH2FkEsF1MA+A0frdFmWptXkQwnSARjBPyzXuVJLCEz/VfbDAwxESDVkwUdQG59EOI0VzRLpIppBrNHGRrqwd9/gMiencS7UzQdEx4Xe+GxHMcwKFolCmYR27sFNxII05loozXWTDwUIxaMyjjGaWKmeSbyX1mIM4xpW2SKGYbzY/QP7cfue43oQC+xwUN0eeFh+QNYy9aSO9sLj9blWDgUzCIlq4Tj9Twaw0lWNHXQ6F2yCgdCJ3prUcekPynEGa5y6Wq0kGJw6ACFnlcI9/cSGzxI55jX8wgE3Z7H2RdRXraW10ZzdK07i4JZxLTLUEgR8PtpiTbRFmuhIZwgFootydVtRW1ImAhxBhq/dDXUQ2r/S4SOHCA62Efj2FEa8cKjYzW59W54mK3LKNgmBbOIg0Nq+CiWY7E82UFrtIlEKE40GMEwFnh7P7FkSJgIcQYYv3Q1fJCRvdswDu0hOthHZOwoEdzwMDtWk1t/IeaytRRbOsnb7jazAEYpS1MkSVfjchrDSRpGwrx+zWWL+02JJUXCRIjTkOM4ZEs5RkYPM7L3ecw+TbS/j/DYEM1UwmMVufUXUu5cQ765g4LtrYaLQ8Aq0hZroSXWREM4STwYnbTUSNAnHx1iMvkXIcRpomAWGRvrZ3h3N8WeVwgP9BAaHSKBuxii2bGa3LrNlJatIdvYRgETx3HAgYTPx8rEMppjTSRCMaIBuWQlTo6EiRB1yrQtxsb6GduzjeyBlwkc2U9odJAwEPIHMDtWkT9rM8XO1aQbWyhhAQY+DJoicVbFWmiMJImHYoT8wcX+dkSdkzARok7Yjk0mNcTovm1k9r+EcWgPoZFBDCBWCY+155Pr6CLd2IJlABiE/EFaY820xppJhuPEgzFZikTMOwkTIZawXGaY0X0vkN77IvbBXYRGBjCAsM/vjnlcdB7Z9hWkG1txvDGNRDjO6ngLzZFG4t4S63LJStRaTcPE20P+Zu/hI1rrP1dKfQj477gz6J8D/lRrXVJKXQTcDzQAv8Bdndj09k95GOgANHCr1joz9b2EOB2UcmlG9j1PZt+LmL2awEg/huMQ8Pkpt3eRvfAqMm0ryDa34fgD+AyD5mgTypvbEQ/FCMolK7EIahYmSqnrgTcDF+MGx+NKqU8CHwC2AGngAeAjwN/jBsYHtNa/VUp9Hfgg7n4q9wL3envI34W78+Ina1W3EAvJzKcZ2/cS6f0vUurZiX/4MIbjgM+P3baSzOYrSbctJ9/SgeMPEPaHaI01c1a0iWQ4QSwky5GIpaGWPZPDwMe11iUApdRO3G18P6y1TnltLwOrlVJrgKjW+rfecx8APqeUuh+4GnhXVftTSJiIOmUVcqQOvERm3wuEdm3jwBNHMRwHx+fHbFtO9vwryLQvp9CyDCcQoCGcYFmsRVbQFUtezcJEa72j8rVS6mzcy11Xaq1f89ragY8CfwSswA2fisNAF9AGpLTW5pR2IeqCVSqQ6nmZzN4XKBx4Bd9grxcePsrxZkbPu4xc+woKrSswgiFaoo2sjbWSjMgKuqK+1PxfqlLqfOAR4BNVQbISeAz4utb650qpK2F8OwNwVym2Ad+Udrz2Wdu+ffupln5Kuru7F/T95pPUPneOVcYZ6cF3dB/B4QPEUoP4HBsbg0yiiZEVZzPc0MZYooVgMEoymKDBHyeWChP2hXBGSwxwmIHF/kZmYan8zE9WvdYNS7v2Wg/AXwl8D/hYZatfpdQ5wBPAl7TWf+ed2gcsr3rqMuAQMAA0KqX8WmvLO+fQydSwadMmwuGFuTTQ3d3Nli1bFuS95pvUfmpsyyTVt5P0nm0UDuzA6N+PzzJxgFJzJyl1Mbn2leTbVhKMxOmMt7Ip7g6W73hph/zMF1i91g0LV3uxWDylX8JrOQC/CvgBcIvW+kmvLQn8GPh/tNYPVc7VWh9QShWUUldqrX8FvA94TGtdVko9DdwCfAu4DbdHI8SisC2T9KFdpPduI39gB8bhvfjMMgBWYxuF9ReQ7VhOvq0LIxKnPd7C+lgLDZEksWBUbtEVp61a9kzuwB1wv0cpVWn7DtAJfFwp9XGv7Yda678EbgXuU0o1AM8DX/KOfxh4UCl1J9ADvKeGNQsxiW1bpA/vIb1vG/n92zEO7cFXLrrHGloonHUe2faV5NpX4kTitMSaWB1vpSnSQDwUkzutxBmjlgPwtwO3T3Pofx7n/BeBY5Yh1VofAK6d1+KEOA7btskM7CO1dxu5/S9jHNqDv5h3jyUaKa3eSKa9i1zHCuxogoZIAyvibTRFG0iG4pMWQxTiTCK3iogzmm3bZIZ6vfB4CQ7tJpDPugdjCYor1pNrX0mmYwVmrIFEKEZHoo2WWBPJUFwmCArhkTARZxTHccgcPcjYvm3k9nnhkXW3mDUiMUqdaxjr6CLTvpxyvIlIKEJnvI11sWaS4YRsOyvEcUiYiNOa4zhkRvtJ7X2e7L4XcQ7uJpgZBcAIRSgvW0Pq3EtJty2jnGwlGAjSEW9jTbyFZDhBNBhZ5O9AiPogYSJOK47jkE0NMrZ3G5n9L+L07SaUcvcx9wVDlDvXMLrxYtJtyyk2teHz+WmLNaPibTREEsSDMbnjSohTIGEi6prjOJQKaQ6+9FMy+17E6dtFcNRdlt0fCFLuWEVq/WZSbcsoNLXj8/tpjjaxLt5KY8QdA5E7roSYOwkTUVccxyGbHWXswItk9r6A3fcaHcNHKIK7sm7HKjIXnkuqbRn55g7w+WmMJFid6Bhf3yogd1wJMe8kTMSS5jgOuVyKsZ6XSO99AbtvF6GjRzAcm4DPR7ltJQdXnU9gw3lkWztwfAESoRjLE220RJtIhuWOKyEWgoSJWFIcxyFXyDDas530vm3YvbsIDR3CZ1sEDAOzdTn5819Pum0FmdZ2HH+QI32HufzsS9kod1wJsWgkTMSichyHXDHLaN8rpPduw+rVhAcP4rNMgoDZsoziOZeSaV9BqrUdJxgh4PPTEW9lXbyVZDjBztQrqPb1i/2tCHFGkzARC8pxHHKlHGMHXyW1dxtmryY80IvfLBMCzKZ2ime/jlzHSlItHVjhMD7DvePqfLnjSoglS8JE1JQbHnnGjrxGas/zmL2vuuFRKhICfA0tlNddwFhHF+m2TsrhCIZh0BxpYmO8jcZIkkQojs8nd1wJsZRJmIh55TgO2VKO1MA+Unuep9y7k3B/L4FinhDgTzRirj6XdOdqxlo7KUdj4EBjJMHaRDvNkQYS4YTccSVEnZEwEfNieGAf/a/+inLvq0T6ewnkM254RJOYK88m27nK3cs86l6iigdjdCXaaI02kQjHCckdV0LUNQkTMSeFXIren9yPb8evCTsOwUiM8rKzyHeuJtW2nHwsAT4I+8N0JNpo8+64kr3MhTi9SJiIU2LbNodf+k+yT/4L/nyGwsYtjG3YTCaRBMMg4AvQEW9lo3fHVTQQkUFzIU5jEibipKWHejn46L2EenfhNHcwePW7GG1opiPRxppEG43hJLFQVJYpEeIMUus94D8D3Ow9fERr/edKqeuBe4Ao8B2t9Z3euRcB9wMNwC+AP9Nam0qp1cDDQAeggVu11pla1i2mZ5olep/eivXMowQch8yWN3F43TnEw0le37GRpmjjYpcohFgkNfvV0QuNNwMXAxcBW5RS7wG+AdwInAtcqpR6q/eUh4GPaq03AgbwQa/9XuBerfU5wHPAXbWqWRzf4N5t7Pna7Ti//nfKnWs4+PY/5siGTaj2jVyx6nUSJEKc4WrZMzkMfFxrXQJQSu0ENgKvaa33eW0PA+9WSr0CRLXWv/We+wDwOaXU/cDVwLuq2p8CPlnDukWVfHaU3h/fh/+V3+KLJhi5+iYGO1fQHm/lkvYNxEOxxS5RCLEE1HIP+B2Vr5VSZ+Ne7voH3JCpOAx0ASuO094GpLTW5pT2Wdu+fftJ1z4X3d3dC/p+86m6dse2KR3aRrN+ilC5QP/yjezqUthlg9VHHZxUiVeP7FzEaier1597vdYN9Vt7vdYNS7v2mg/AK6XOBx4BPgGYuL2TCgOwcS+3ObNox2uftU2bNhEOL8xtqN3d3WzZsmVB3mu+Vdc+Nrifw49+hVDfbsotnQxedjOpZCOXNa1kQ8saQktsIcV6/bnXa91Qv7XXa92wcLUXi8VT+iW81gPwVwLfAz6mtd6qlLoGWF51yjLgENB3nPYBoFEp5ddaW945h2pZ85msXC7S+9S3sJ97nIBhkLnk9zl8liIeTsgAuxDihGo5AL8K+AHwXq31Vq/5d+4htUEp5QfeCzymtT4AFLzwAXif114GngZu8dpvAx6rVc1nsuLQbvZ87Xb43X9QXrGeQ2/7I46sO4+N7RtkgF0IMaNa9kzuACLAPUqpSts/AX+E21uJAI8C/+YduxW4TynVADwPfMlr/zDwoFLqTqAHeE8Naz7j5DJH6X3iPjpffRY7lmTk2j9ksGM57bEWtsgAuxBilmo5AH87cPtxDl84zfkvApdN034AuHZeixNYtkVf96MUf/FdAsU8/SsU+de/CSMc5cL2DSxLtMuMdSHErMkM+DPQSP8e+h/5J0KH9+K0LmfwunezfWSMK1tXcXbL2iU3wC6EWPokTM4g5VKB/T9/COP5nxAw/KQvfQv9a88mFk6gys2c37Fx5hcRQohpSJicARzH4ciu35H6yTcIjh2luOYcBi+6mkI4ytltZ7G6cQUvDL2w2GUKIeqYhMlpLpsaoveJrxHa1Y0Rb2Dkuncz2L5MBtiFEPNKwuQ0ZVkWvc/9iPLT/0awVCB3/hX0n/M6jFBEBtiFEPNOwuQ0NHxoF/2PfZXwkf3YbSsYuuwtjMUTrGpaIQPsQoiakDA5jRSLOXp+9s8Y254k6A+QvvytHFm1nngkweUdG2mWiYdCiBqRMDkNOI7D4Vd/Tfo/v0kwNUJx7XkMXnQVhVCEjd4Au9/nX+wyhRCnMQmTOpcZHaD3ia8S3v0CRqKJ4TfewmBrOx3xVhlgF0IsGAmTOmVaJr3P/DvmL79PqFwit/lK+tVFGMEIF7avZ3miQwbYhRALRsKkDh09+CoDj36V8EAPdnsXQ5e9mbFYXAbYhRCLRsKkjhQLGfY/+SCBF35OMBgk/fq3uQPs4RiXdygZYBdCLBoJkzpgOzYHdz5N7j8fIpgeobhuMwMXXEkxFObstrWsblxJQAbYhRCLSMJkiUuNHObg418lvPdljGQzw296D0MtbbTFm9nSvoFEKL7YJQohhITJUlW2yvT+5vtYv/l3QmaZ3AVX0b/xQgiGuMCbwe4zara3mRBCnJRab9vbAPwaeIfWer9S6s3A3wB+3A2wPqC1LimlVgMPAx2ABm7VWmeUUk3AvwDrgEHgZq31kVrWvBQM9uxg6PGvER7sw+pY5Q2wx1jVuJwNLWcRlgF2IcQSU8ttey8HfglUr2v+deC/aK03ATHcbXgB7gXu1VqfAzwH3OW13w08rbU+F7gP+GKt6l0K8vk0+j++ROrhzxIcGyJ9xTs4cM27sJrauLzrYs7vUBIkQoglqZY9kw8CHwEeqmrzAw3e/u8RIK+UCgJXA+/yznkAeAr4JPB27xjAt4EvK6WC3t7wpw3bsTm4/efkfvowwewYhfUXMnjBGygGQzLALoSoC7XctvcDAFX7v4O7n/vPgRSwD3f/9zYgpbU2vXMOA13e1yu8x2itTaVUCmgHDtWq7oU2NtzHwce+RmT/DoyGFoZ//70MNbXKALsQoq4s2AC8UmoZ8NfAJtwgucf78wXAmXK67f09dQq3UXVsVrZv337Stc5Fd3f3rM6zbJPSvl/Rvvd3hGybvtWb2b38LMgUWWXZkCqjj7xa42onm23tS1G91l6vdUP91l6vdcPSrn0h7+a6Ctiutd4DoJS6D/gu8DGgUSnl11pbwHImeh4HgWVAn1IqACSBoyfzpps2bSIcDs/Tt3Bi3d3dbNmyZcbzjux/kZEnHiA8dIjSsrUMXno9uWiUyxdxgH22tS9F9Vp7vdYN9Vt7vdYNC1d7sVg8pV/CF/Le0u3AZUqpTu/xjcCz3vjH08AtXvttwGPe148yMUh/C+5gfN2Ol2Szo+z84d+T/dZfEUiPkLryBnquugGrsZXLui6SAXYhRN1asJ6J1nqnUuou4GdKKRPYDXzIO/xh4EGl1J1AD/Aer/0u4AGl1A5gFLh1oeqdT7Zt0/vSTyn8/FuEsykKGy7yBtiDbGhZy+omGWAXQtS3moeJ1npt1dcPAg9Oc84B4Npp2oeBG2pYXs2NDPVw+PGvEjnwKkZjG8Nv/q8MNTbLALsQ4rQiM+BrpFgu0vOr78IzjxK2LHIXX0f/hs0QCMgMdiHEaUfCZJ45jsPh/S8w9vj9hIePUFq+jsFLrycVCbOqcZnMYBdCnJYkTOZRqZTh1X+/h9ArvyEQjpL6vXcxsHw10XCUyzo20hJtWuwShRCiJiRM5oFlW/S8+BMaf/kw4VKewsbXMbj5CoqBgAywCyHOCBImczQ8sI8jj3+NSO8u7Fgjw9f9IUMNTTLALoQ4o0iYnKJiqcCBX34b37NPEHIcsq97E88Fk6xuaeeCtvUsS3bIALsQ4owhYXKSHMfh0N7nSD3xDcIjA5RWrmfkkt9nLByg8UiG31t9qQywCyHOOBImJyGdOUrvj79O+NVnCERipK6+iYHOrvEB9n2pPRIkQogzkoTJLJQtk95tj2P+4l8J5zMUz7mEgfNfTyngZ0PzGlY3dxHw+dm32IUKIcQikTCZwVD/Hvof+xrRg7uhuYPha/4PjjY00Bpt5pIOGWAXQgiQMDmuYrnAvp8/TOD5/yTsQHbL9QysPw98fncGuwywCyHEOAmTadhmicMPfJrQQA+lrrMZueR6xkIBuho6Obt1nYyLCCHEFBIm07EtjMZ2Dq4/n/yqs4mGZAa7EEKciITJNHyhKOG3fZDMoZdRLWvHB9iFEEJMT8LkOFqiTVyz9gpioehil/L/t3fmQVZUVxj/wcjmQtByiRpRCfGgUIA+DOASjYLGBfdI4QqCSyHGlEtCiUHFiEncYjRG4x4VMSomxiWFQUuQLXGM6ED8TKkoBklMYiRGNoH8ce7gY5yFN2/em9dwflVTM33f7b5fv+nu0/fe7u8EQRBUPBFMGqB9VTvaV7VrbRlBEASZoOTBxMw6A7OAoyUtNLOBwE14PvfXgDMlrTSzvsBdQGdgOnCepM/MrCvwILA9IOBUSZ+UWncQBEGw4ZT02VYz6w+8BOyRljsDU4BzJPVM1Uam3w8CYyTtAbQBzk7ltwG3SeoBvIyn8g2CIAgqiFK/KHE2cD6wOC0PBmZLei0tXwA8YWa7Ap0kzUnl9wHfNrN2wDeAx/LLS6w5CIIgKJCSDnNJGgVgZrVF3YFPzGwy0AOYCVwM7A18kLfqB8BXgG2BpZI+q1MeBEEQVBDlnoDfDDgcGAC8B9wNjAWeA9bm1WsDrMF7TmvrbGNNIQ3W1NQ0V2uzqK6uLmt7LUloLz9Z1Q3Z1Z5V3VDZ2ssdTJYAcyS9A2BmvwbGAPcCO+bV+zI+NPYP4EtmViVpdaqzmALo1asXHTp0aAntTVJdXU0ulytLWy1NaC8/WdUN2dWeVd1QPu0rVqxo1k14uYPJVOAqM9tF0i2cUp8AAAk+SURBVCLgaKBa0rtmttzM9pc0EzgdeFbSKjObAQwFJgFnAM9uYFtVACtXrmz5vWiEFStWlLW9liS0l5+s6obsas+qbiiP9rxrZkFvardZu7buKFLLY2YLgYPTo8FHAdcAHYFXgbMkfWpmfYA78UeDXwFGSFqRJufvxx8Nfg8YJumjptqsrq4+AJhRiv0JgiDYBDgwl8u9tKGVyxJMWoPq6uoOwL74pP3qVpYTBEGQFarwKYU/5XK5De4KbbTBJAiCICgfkZAjCIIgKJoIJkEQBEHRRDAJgiAIiiaCSRAEQVA0EUyCIAiCoolgEgRBEBRNBJMgCIKgaCLT4gZQT4KvQcCNQCfgEUmXp3oVleDLzK4ATk6LT0v6Xoa0TwBOwo0+75Z0Y1a0J03XA9tKGl6oPjPrAjwEdAM+BE6WtKQMml9IWlalonOBrwKXA+2An0r6eapb0P+ixLqHAFcAWwBTJV2YhWPFzEbh3oS17A48APym0rXXR/RMmqCeBF+dgHuAY4E9gX3N7IhUvWISfKWT6TDc3r8vkDOzYRnRfhBwCNAb6AdckOx2Kl570n8ocGZeUaH6fgjMkLQnbjF0cxk0t8GP8T6S+krqC7yPWx8dgB9D55jZXs08B0qluxtwO3Acfrzsk7RU/LEi6a687/pU3Nj2x1nQXh8RTJqmboKvrwN/lfROuuN6EE/kVWkJvj4ALpa0UtIq4C/4xaLitUt6Efhm0rg93oPukgXtZrYNfgGemJabo+8ovGcC8DBwRKpfUunp91Qzm2dmY4BBwPOS/i3pf0nrSRR4DpRY9/H43fv76TgfCnxaiL4KScL3C+AyvDeaNe1ABJMmkTRKUr5h5E7Un8irofJWSfAlaX7tgWdmX8OHu9Y0oLGitAMkx+irgAXAtEY0Vpr2O4BxQK0ZaXP0rVsnfb4U2K60stka/56PBw4FzgO6NqC90P9FKekOVJnZk2b2KjC6GfpaNQlfGkXoJOnRRjRWpPZ8IpgUTt2EXQ0l8mqxBF/FYGY98eRjlwJvkyHtkq7AL6K74L2qitaexsAXSZqWV9wcfW3qlLehxNolzZZ0hqSPJf0TT1w3geK+85Lrxnutg4CRwECgP353X9HHSh3OxedIqEdLpWtfRwSTwnmf+hN5NVS+LsFXKi84wVdzMbP98bvNsZLub0RjRWk3sx5pshFJnwJTgIMb0FhJ2ocCh6U75AnAMcCoZuj7W6qHmW0GbAX8q5TCzeyANNdTSxtgIYV95w2Vl5IlwB8kfShpGfAEHlwq/VgBwMzaAwcBT6aiTJyj9RHBpHDmAmZm3dM/8BQ8kde7wPJ0AYe8BF94XpWhqbyQBF/Nxsx2wZ8KOUXS5Cxpx+8s7zSzDulkOxYfPqpo7ZIGS+qVJlTHA09KGtEMfc+kZdLnM1L9UtIFuM7MOprZVvgDBKcBh5rZdma2OXAi8HsKPI5KrPsp4HAz65K0HIHPH1T0sZJHb+DNNCcF2TlHv0AEkwKRtBwYDjyOj+e/weeTX6cCN5nZG8CWwM9S+Wj8SZgFwIH4o5al5hI8AdmNZvZqulsengXtkp4Bngb+DFQDs1JArHjtDVCovh8AA8xsfqpzfqkFSnqK9b/ze1LW03HAC3giu0mS/tjMc6BUuucCP8GfuFwAvItPZheqr7WOlW54rwPI1PXlC0Q+kyAIgqBoomcSBEEQFE0EkyAIgqBoIpgEQRAERRPBJAiCICiaCCZBEARB0UQwCTKDme1mZmvNbGSd8kvM7L4WbGehmfVrqe010VZnM5tpZvPN7IRytNmEnivN7NbW1hFkj7CgD7LGGuAGM3tJklpbTAvQF9hBUvfWFhIExRDBJMgay4AbgElmNlDSyvwPUw+lRtL1dZfNbCEwCbe33xp/2W1/IIfn8DhGUq0VxfnJ9r4DcIOke9L2huAvhbXH3WkvkTTbzK7EvaF2AuZJOq2OruPwnBttgf8CFwEf43bjO6eXSgcmS5DadU5Iba0BVgOXSppuZgOS9g64fcZzkkaa2W7A87gXWw4/v8fj3k+19uTDcAPHF/G32fvj1ilj6hiaYmY7A7em+u2AyZImJouXW9J3twr3fBvRGjk0gsohhrmCLHIN8AnJ5r1AOkoagF9kfwncLKkPsAh/87iWZZL2AQYD15pZz+S+PBE4UtLewDnAFDPbIq2zK7B3PYGkB55z48TU1njgt7jD6yjgrZTXYhnrcx0wWlI//K34g1P5hcB4Sf2BvYBjzCyXPtsdT4TWD5iN50IZBvTE344ekOp1BV5M1i9jgUfqsbl/AH8TPofbzg8ys5PxoHkwnvskhweT3vV818EmRASTIHNIWoP7Ro0ws8EFrv54+v0WsETSvLzlbfLq3ZHaWgxMxW3ZB+M9gWmpJ/EQ3muoHaKao/qzCh4CTJP0dtrm87hBX66euvlMBp4ws7v4vCcF7pvVxcwuwxMjdcLtNcB7Cr/L26dZkpYmm47Fefv4kaRJSc+zeM9nXUBIAfIg4Oq0r3PwANQXeD3Vn2tmVwOPS5rVxL4EGzkRTIJMImkRPnxzP57ToZa1rG/h3r7Oqivy/m7MPHF13t9tU90qPCj0zcuQNwCoSfUaGuap4os24W3xoaMGkTQOz3L4Mt5rmp4+mg4cifs2TcBdhmv3eaWk/LYa2se6Qa8t6+9zVdrmfnX2daKk/wB9cP+31XivZnRj+xJs/EQwCTKLpMdwh9Tv5hV/iKf6xcx2wu+um8PwtI2uuKX5tPRzWBq2wsyOBF7DewaNMQ13tu2W1jsEz9Eyt6EVzGyzNMezuaTbcTO/3ma2A7Av8H1JU/BESN3xi38hbGdm30ptDcGDzuu1H0paivdGLkp1ugAzgWPN7Oi0T7MkXQn8KmkKNmEimARZ5zu4U2wttwA7mpmAe/EJ6ebQ0cxewe3gL5D0pqQF+DzJZDObB1yNT9o3OvGc1huNz6/UAD8Chkj6uJF1PsOD5KSk41HgLEl/B64FXknbGotf5At9Gmw5cHraj3HAcZJW16lzCu5e/Doe+B6W9BAewOcDNWb2MrAfcFWB7QcbGeEaHASbGOmprxpJWzZVNwg2lOiZBEEQBEUTPZMgCIKgaKJnEgRBEBRNBJMgCIKgaCKYBEEQBEUTwSQIgiAomggmQRAEQdFEMAmCIAiK5v8OPxMJ5/4rNgAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "#预测与可视化\n",
    "train_scores = (-1*train_scores)**0.5\n",
    "valid_scores = (-1*valid_scores)**0.5\n",
    "train_scores_mean = np.mean(train_scores, axis=1)\n",
    "train_scores_std = np.std(train_scores, axis=1)\n",
    "valid_scores_mean = np.mean(valid_scores, axis=1)\n",
    "valid_scores_std = np.std(valid_scores, axis=1)\n",
    "\n",
    "plt.figure()\n",
    "plt.plot(train_sizes,valid_scores_mean,label='valid')\n",
    "plt.plot(train_sizes,train_scores_mean,label='train')\n",
    "plt.fill_between(train_sizes, train_scores_mean - train_scores_std, train_scores_mean + train_scores_std, alpha=0.3,color=\"g\")\n",
    "plt.fill_between(train_sizes, valid_scores_mean - valid_scores_std,valid_scores_mean + valid_scores_std, alpha=0.3, color=\"b\")\n",
    "plt.xlabel('Number of samples')\n",
    "plt.ylabel('RMSE')\n",
    "plt.legend()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0.5,0,'relative importance')"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "#特征依赖性分析\n",
    "rf = RandomForestRegressor(max_depth=9, n_estimators=500).fit(X_train_scaled,y_train)\n",
    "f_im = rf.feature_importances_.round(3)\n",
    "ser_rank = pd.Series(f_im,index=X.columns).sort_values(ascending=False)\n",
    "\n",
    "plt.figure()\n",
    "sns.barplot(y=ser_rank.index,x=ser_rank.values,palette='deep')\n",
    "plt.xlabel('relative importance')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Test set RMSE: 2840.182\n"
     ]
    }
   ],
   "source": [
    "#上图表示有可能有数据泄露，虽然准确率不错，但应该用其他属性预测\n",
    "X = df_encoded.drop(['Purchase'], axis=1)\n",
    "y = df_encoded['Purchase']\n",
    "X_train,X_test,y_train,y_test = train_test_split(X,y,random_state=100)\n",
    "\n",
    "scaler = StandardScaler().fit(X_train)\n",
    "X_train_scaled = scaler.transform(X_train)\n",
    "X_test_scaled = scaler.transform(X_test)\n",
    "\n",
    "rf = RandomForestRegressor(max_depth=9, n_estimators=500).fit(X_train_scaled,y_train)\n",
    "y_predicted = rf.predict(X_test_scaled)\n",
    "print('Test set RMSE: {:.3f}'.format(mean_squared_error(y_test,y_predicted)**0.5))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [],
   "source": [
    "#使用低属性\n",
    "df_ocup = pd.get_dummies(df.Occupation)\n",
    "df_encoded = pd.concat([df_encoded,df_ocup],axis=1)\n",
    "df_encoded.drop(['Occupation'],axis=1,inplace=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "        User_ID  Product_ID  Gender  Marital_Status  Product_Category_1  \\\n",
      "0             0         670       0               0                   3   \n",
      "1             0        2374       0               0                   1   \n",
      "2             0         850       0               0                  12   \n",
      "3             0         826       0               0                  12   \n",
      "4             1        2732       1               0                   8   \n",
      "5             2        1829       1               0                   1   \n",
      "6             3        1743       1               1                   1   \n",
      "7             3        3318       1               1                   1   \n",
      "8             3        3596       1               1                   1   \n",
      "9             4        2629       1               1                   8   \n",
      "10            4        2396       1               1                   5   \n",
      "11            4         140       1               1                   8   \n",
      "12            4         307       1               1                   8   \n",
      "13            4        1353       1               1                   1   \n",
      "14            5        2201       0               0                   5   \n",
      "15            5        1796       0               0                   4   \n",
      "16            5        3590       0               0                   2   \n",
      "17            5         572       0               0                   5   \n",
      "18            6         362       1               1                   1   \n",
      "19            7        2380       1               1                   1   \n",
      "20            7        2094       1               1                   5   \n",
      "21            7        1467       1               1                   8   \n",
      "22            7        2027       1               1                   8   \n",
      "23            7        2034       1               1                   8   \n",
      "24            7        2907       1               1                   1   \n",
      "25            8        1262       1               0                   6   \n",
      "26            8         391       1               0                   8   \n",
      "27            8        1515       1               0                   5   \n",
      "28            8         763       1               0                   5   \n",
      "29            9         831       0               1                   2   \n",
      "...         ...         ...     ...             ...                 ...   \n",
      "537547     4615        2325       1               0                   1   \n",
      "537548     4616        1017       1               1                  15   \n",
      "537549     4616        3315       1               1                   2   \n",
      "537550     4617        2662       1               0                   1   \n",
      "537551     4617        3001       1               0                   5   \n",
      "537552     4617        3610       1               0                   6   \n",
      "537553     4617        1100       1               0                  10   \n",
      "537554     4617        1047       1               0                   5   \n",
      "537555     4617        1256       1               0                  13   \n",
      "537556     4618        1839       1               1                   8   \n",
      "537557     4618        1646       1               1                   2   \n",
      "537558     4618         928       1               1                   8   \n",
      "537559     4618         998       1               1                   8   \n",
      "537560     4618         820       1               1                   8   \n",
      "537561     4618         757       1               1                   8   \n",
      "537562     4618        1370       1               1                   1   \n",
      "537563     4618        1449       1               1                   8   \n",
      "537564     4618        1081       1               1                   5   \n",
      "537565     4618         502       1               1                   8   \n",
      "537566     4618         478       1               1                   5   \n",
      "537567     4618        1477       1               1                   8   \n",
      "537568     4618        2390       1               1                  11   \n",
      "537569     4618         226       1               1                   5   \n",
      "537570     4618        1525       1               1                   1   \n",
      "537571     4619        2104       1               0                   1   \n",
      "537572     4619        1829       1               0                   1   \n",
      "537573     4619        1018       1               0                   1   \n",
      "537574     4619        3316       1               0                   8   \n",
      "537575     4619        2736       1               0                   5   \n",
      "537576     4619        1089       1               0                   5   \n",
      "\n",
      "        Product_Category_2  Product_Category_3  Purchase  0-17  18-25 ...  11  \\\n",
      "0                      0.0                 0.0      8370     1      0 ...   0   \n",
      "1                      6.0                14.0     15200     1      0 ...   0   \n",
      "2                      0.0                 0.0      1422     1      0 ...   0   \n",
      "3                     14.0                 0.0      1057     1      0 ...   0   \n",
      "4                      0.0                 0.0      7969     0      0 ...   0   \n",
      "5                      2.0                 0.0     15227     0      0 ...   0   \n",
      "6                      8.0                17.0     19215     0      0 ...   0   \n",
      "7                     15.0                 0.0     15854     0      0 ...   0   \n",
      "8                     16.0                 0.0     15686     0      0 ...   0   \n",
      "9                      0.0                 0.0      7871     0      0 ...   0   \n",
      "10                    11.0                 0.0      5254     0      0 ...   0   \n",
      "11                     0.0                 0.0      3957     0      0 ...   0   \n",
      "12                     0.0                 0.0      6073     0      0 ...   0   \n",
      "13                     2.0                 5.0     15665     0      0 ...   0   \n",
      "14                     8.0                14.0      5378     0      0 ...   0   \n",
      "15                     5.0                 0.0      2079     0      0 ...   0   \n",
      "16                     3.0                 4.0     13055     0      0 ...   0   \n",
      "17                    14.0                 0.0      8851     0      0 ...   0   \n",
      "18                    14.0                16.0     11788     0      0 ...   0   \n",
      "19                     5.0                15.0     19614     0      0 ...   0   \n",
      "20                    14.0                 0.0      8584     0      0 ...   0   \n",
      "21                     0.0                 0.0      9872     0      0 ...   0   \n",
      "22                     0.0                 0.0      9743     0      0 ...   0   \n",
      "23                     0.0                 0.0      5982     0      0 ...   0   \n",
      "24                     8.0                14.0     11927     0      0 ...   0   \n",
      "25                     8.0                 0.0     16662     0      0 ...   0   \n",
      "26                     0.0                 0.0      5887     0      0 ...   0   \n",
      "27                    14.0                 0.0      6973     0      0 ...   0   \n",
      "28                     8.0                14.0      5391     0      0 ...   0   \n",
      "29                     4.0                 8.0     16352     0      0 ...   0   \n",
      "...                    ...                 ...       ...   ...    ... ...  ..   \n",
      "537547                 2.0                15.0     11543     0      1 ...   0   \n",
      "537548                 0.0                 0.0     20924     0      0 ...   0   \n",
      "537549                 8.0                14.0     13082     0      0 ...   0   \n",
      "537550                 0.0                 0.0     11658     0      0 ...   0   \n",
      "537551                 6.0                 8.0      6863     0      0 ...   0   \n",
      "537552                 8.0                 0.0     16415     0      0 ...   0   \n",
      "537553                13.0                 0.0     18526     0      0 ...   0   \n",
      "537554                14.0                 0.0      7099     0      0 ...   0   \n",
      "537555                16.0                 0.0       578     0      0 ...   0   \n",
      "537556                14.0                 0.0      2183     0      1 ...   0   \n",
      "537557                 0.0                 0.0     12724     0      1 ...   0   \n",
      "537558                17.0                 0.0      7796     0      1 ...   0   \n",
      "537559                17.0                 0.0      7770     0      1 ...   0   \n",
      "537560                16.0                 0.0      5940     0      1 ...   0   \n",
      "537561                16.0                 0.0      7834     0      1 ...   0   \n",
      "537562                13.0                14.0     11508     0      1 ...   0   \n",
      "537563                 0.0                 0.0      6074     0      1 ...   0   \n",
      "537564                14.0                 0.0      7084     0      1 ...   0   \n",
      "537565                 0.0                 0.0      7934     0      1 ...   0   \n",
      "537566                 0.0                 0.0      5350     0      1 ...   0   \n",
      "537567                14.0                 0.0      1994     0      1 ...   0   \n",
      "537568                 0.0                 0.0      5930     0      1 ...   0   \n",
      "537569                14.0                 0.0      7042     0      1 ...   0   \n",
      "537570                16.0                 0.0     15491     0      1 ...   0   \n",
      "537571                 2.0                 5.0     11852     0      0 ...   0   \n",
      "537572                 2.0                 0.0     11664     0      0 ...   0   \n",
      "537573                15.0                16.0     19196     0      0 ...   0   \n",
      "537574                15.0                 0.0      8043     0      0 ...   0   \n",
      "537575                 0.0                 0.0      7172     0      0 ...   0   \n",
      "537576                 8.0                 0.0      6875     0      0 ...   0   \n",
      "\n",
      "        12  13  14  15  16  17  18  19  20  \n",
      "0        0   0   0   0   0   0   0   0   0  \n",
      "1        0   0   0   0   0   0   0   0   0  \n",
      "2        0   0   0   0   0   0   0   0   0  \n",
      "3        0   0   0   0   0   0   0   0   0  \n",
      "4        0   0   0   0   1   0   0   0   0  \n",
      "5        0   0   0   1   0   0   0   0   0  \n",
      "6        0   0   0   0   0   0   0   0   0  \n",
      "7        0   0   0   0   0   0   0   0   0  \n",
      "8        0   0   0   0   0   0   0   0   0  \n",
      "9        0   0   0   0   0   0   0   0   1  \n",
      "10       0   0   0   0   0   0   0   0   1  \n",
      "11       0   0   0   0   0   0   0   0   1  \n",
      "12       0   0   0   0   0   0   0   0   1  \n",
      "13       0   0   0   0   0   0   0   0   1  \n",
      "14       0   0   0   0   0   0   0   0   0  \n",
      "15       0   0   0   0   0   0   0   0   0  \n",
      "16       0   0   0   0   0   0   0   0   0  \n",
      "17       0   0   0   0   0   0   0   0   0  \n",
      "18       0   0   0   0   0   0   0   0   0  \n",
      "19       1   0   0   0   0   0   0   0   0  \n",
      "20       1   0   0   0   0   0   0   0   0  \n",
      "21       1   0   0   0   0   0   0   0   0  \n",
      "22       1   0   0   0   0   0   0   0   0  \n",
      "23       1   0   0   0   0   0   0   0   0  \n",
      "24       1   0   0   0   0   0   0   0   0  \n",
      "25       0   0   0   0   0   1   0   0   0  \n",
      "26       0   0   0   0   0   1   0   0   0  \n",
      "27       0   0   0   0   0   1   0   0   0  \n",
      "28       0   0   0   0   0   1   0   0   0  \n",
      "29       0   0   0   0   0   0   0   0   0  \n",
      "...     ..  ..  ..  ..  ..  ..  ..  ..  ..  \n",
      "537547   0   0   0   0   0   0   1   0   0  \n",
      "537548   0   0   0   0   0   0   0   0   0  \n",
      "537549   0   0   0   0   0   0   0   0   0  \n",
      "537550   0   0   0   0   0   0   0   0   0  \n",
      "537551   0   0   0   0   0   0   0   0   0  \n",
      "537552   0   0   0   0   0   0   0   0   0  \n",
      "537553   0   0   0   0   0   0   0   0   0  \n",
      "537554   0   0   0   0   0   0   0   0   0  \n",
      "537555   0   0   0   0   0   0   0   0   0  \n",
      "537556   0   0   0   0   0   0   0   0   1  \n",
      "537557   0   0   0   0   0   0   0   0   1  \n",
      "537558   0   0   0   0   0   0   0   0   1  \n",
      "537559   0   0   0   0   0   0   0   0   1  \n",
      "537560   0   0   0   0   0   0   0   0   1  \n",
      "537561   0   0   0   0   0   0   0   0   1  \n",
      "537562   0   0   0   0   0   0   0   0   1  \n",
      "537563   0   0   0   0   0   0   0   0   1  \n",
      "537564   0   0   0   0   0   0   0   0   1  \n",
      "537565   0   0   0   0   0   0   0   0   1  \n",
      "537566   0   0   0   0   0   0   0   0   1  \n",
      "537567   0   0   0   0   0   0   0   0   1  \n",
      "537568   0   0   0   0   0   0   0   0   1  \n",
      "537569   0   0   0   0   0   0   0   0   1  \n",
      "537570   0   0   0   0   0   0   0   0   1  \n",
      "537571   0   0   0   0   1   0   0   0   0  \n",
      "537572   0   0   0   0   1   0   0   0   0  \n",
      "537573   0   0   0   0   1   0   0   0   0  \n",
      "537574   0   0   0   0   1   0   0   0   0  \n",
      "537575   0   0   0   0   1   0   0   0   0  \n",
      "537576   0   0   0   0   1   0   0   0   0  \n",
      "\n",
      "[537577 rows x 44 columns]\n"
     ]
    }
   ],
   "source": [
    "print(df_encoded)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [],
   "source": [
    "df_frac = df_encoded.sample(frac=0.02,random_state=100)\n",
    "X = df_frac.drop(['Purchase','User_ID','Product_ID','Product_Category_1','Product_Category_2','Product_Category_3'], axis=1)\n",
    "y = df_frac['Purchase']\n",
    "X_train,X_test,y_train,y_test = train_test_split(X,y,random_state=100)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [],
   "source": [
    "param_grid = {'n_estimators':[1,3,10,30,100,150,300,400,500],'max_depth':[1,3,5,7,9,11]}\n",
    "grid_rf = GridSearchCV(RandomForestRegressor(),param_grid,cv=10,scoring='neg_mean_squared_error').fit(X_train,y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Best parameter: {'max_depth': 5, 'n_estimators': 30}\n",
      "Best score: 4936.66\n"
     ]
    }
   ],
   "source": [
    "print('Best parameter: {}'.format(grid_rf.best_params_))\n",
    "print('Best score: {:.2f}'.format((-1*grid_rf.best_score_)**0.5))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [],
   "source": [
    "train_sizes, train_scores, valid_scores = learning_curve(RandomForestRegressor(max_depth=5, n_estimators=30), X_train, y_train, cv=10, scoring='neg_mean_squared_error')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.legend.Legend at 0x22734e52e48>"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "train_scores = (-1*train_scores)**0.5\n",
    "valid_scores = (-1*valid_scores)**0.5\n",
    "train_scores_mean = np.mean(train_scores, axis=1)\n",
    "train_scores_std = np.std(train_scores, axis=1)\n",
    "valid_scores_mean = np.mean(valid_scores, axis=1)\n",
    "valid_scores_std = np.std(valid_scores, axis=1)\n",
    "\n",
    "plt.figure()\n",
    "plt.plot(train_sizes,valid_scores_mean,label='valid')\n",
    "plt.plot(train_sizes,train_scores_mean,label='train')\n",
    "plt.fill_between(train_sizes, train_scores_mean - train_scores_std, train_scores_mean + train_scores_std, alpha=0.3,color=\"g\")\n",
    "plt.fill_between(train_sizes, valid_scores_mean - valid_scores_std,valid_scores_mean + valid_scores_std, alpha=0.3, color=\"b\")\n",
    "plt.xlabel('Number of samples')\n",
    "plt.ylabel('RMSE')\n",
    "plt.legend()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0.5,0,'relative importance')"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "rf = RandomForestRegressor(max_depth=5, n_estimators=30).fit(X_train,y_train)\n",
    "f_im = rf.feature_importances_.round(3)\n",
    "ser_rank = pd.Series(f_im,index=X.columns).sort_values(ascending=False)\n",
    "\n",
    "plt.figure()\n",
    "sns.barplot(y=ser_rank.index,x=ser_rank.values,palette='deep')\n",
    "plt.xlabel('relative importance')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Test set RMSE: 4877.794\n"
     ]
    }
   ],
   "source": [
    "y_predicted = rf.predict(X_test)\n",
    "print('Test set RMSE: {:.3f}'.format(mean_squared_error(y_test,y_predicted)**0.5))"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.0"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
